Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nuevas funcionalidades para reforzar OA Promesas en Buger Queen #1158

Merged
merged 5 commits into from
Dec 14, 2022

Conversation

ssinuco
Copy link
Collaborator

@ssinuco ssinuco commented Mar 15, 2022

Aquí propongo nuevas funcionalidades del proyecto Burger Queen para reforzar los objetivos de aprendizaje de promesas. La motivación para esto es que hay estudiantes que por tiempo deciden pasar de social network a burger queen, sin implementar el proyecto md-links. Las estudiantes que hacen esto no tienen la oportunidad de aprender a crear su propias promesas, usar Promise.all y encadanar/anidar promesas. La idea es cubrir estos conceptos con las nuevas funcionalidades de Burger Queen.

Copy link
Contributor

@unjust unjust left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Me parece bien. Solo mi duda es si podemos sacar la dependencia de herokuapp


## 7. Funcionalidades para reforzar OA de promesas

Te sugerimos implementar las siguientes funcionalidades para que puedas reforzar los objetivos de aprendizaje de promesas vistos en el proyecto de MD Links.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

necesitamos referir a MD Links? o podemos decir "Te sugerimos implementar las siguientes funcionalidades para que puedas reforzar los objetivos de aprendizaje de promesas, si aun no has creado promesas en otro proyecto" algo asi?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si, también siento que se puede omitir mencionar MD links

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si, es cierto podemos omitirlo

Copy link
Contributor

@adolivaresl adolivaresl Mar 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estoy de acuerdo en omitir a MD-Links! y me parece bien el texto que ofrece Ivy, pero quizás no lo dejaría solo para quienes no han hecho promesas en sus proyectos anteriores... quizás lo dejaría como "...trabajar y/o reforzar objetivos de aprendizaje de promesas", en caso de que alguien quiera seguir reforzando lo aprendido en MD-links pero no necesariamente quiera realizar el proyecto de Burger Queen API.

Te sugerimos implementar las siguientes funcionalidades para que puedas reforzar los objetivos de aprendizaje de promesas vistos en el proyecto de MD Links.

* Agrega la opción de actualizar 2 o más pedidos que esten en la cocina. Muestra al usuario un **único** mensaje de confirmación cuando **todos** los pedidos hayan sido actualizados con éxito. Recuerda, firestore al [actualizar un documento](https://firebase.google.com/docs/firestore/manage-data/add-data#update-data) retorna una promesa. ¿Cómo podrías mostrar el mensaje de confirmación unicamente cuando todas las promesas se hayan resuelto? Te sugerimos revisar la función [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).
* Cuando un pedido finalice se debe hacer una petición HTTP a la url [https://salty-escarpment-74924.herokuapp.com/](https://salty-escarpment-74924.herokuapp.com/) que responderá de forma aleatoria si el cliente tiene el 50% de descuento en su cuenta. Para esto deberás llamar la función _getDiscount_ mostrada a continuación. Termina la implementación de la función según los comentarios que hay en ella. Te sugerimos revisar la documentacion de [HTTP Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status), [fetch](https://developer.mozilla.org/en-US/docs/Web/API/fetch) y [creación de promesas](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

este herokuapp es algo que hemos escrito y podemos garantizar que siempre va a estar?
pensando que quiza podemos incluir un function que resuelva su Promesa con status 200 o 500 aleatoriamente, para no tienes que depender en otro servicio

Copy link
Contributor

@santiaguf santiaguf Mar 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ssinuco quién es owner de esta API? hay repo?
En caso de que seas tu el owner, estaría bueno que la API devuelva un parámetro booleano con el descuento ej:

{
  "gotDiscount": true,
  "msg": "Has obtenido un 50% de descuento"
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si yo escribi esta app. Es muy sencilla, de forma aleatoria devuelve 200 o 500. Lo ideal es transferirla a un perfil de laboratoria o que la estudiante la mocke, que opinan que sean mejor @unjust y @santiaguf ?

@santiaguf agrego entonces el parametro que sugeriste, gracias

Copy link
Contributor

@santiaguf santiaguf Mar 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si quieres, la puedes transferir como repo de laboratoria, es decir, forkear desde tu perfil al de laboratoria, de tal suerte que quede algo como:
https://github.com/laboratoria/buger-queen-discount forked from https://github.com/ssinuco/buger-queen-discount

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agregaría una sugerencia de empezar realizando un diagrama de flujo, como para que tengan una idea más visual de como funcionaría esto.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si yo escribi esta app. Es muy sencilla, de forma aleatoria devuelve 200 o 500. Lo ideal es transferirla a un perfil de laboratoria o que la estudiante la mocke, que opinan que sean mejor @unjust y @santiaguf ?

@santiaguf agrego entonces el parametro que sugeriste, gracias

Prefiero ponerlo en un repo Laboratoria o archivo dentro del proyecto. El mock puede ser opcional, creo puede ser mucho para alguien que todavía falta promesas no se.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estoy de acuerdo en que depender de una API externa mantenida por un coach puede ser problemático. ¿Qué les parecería sugerir que implementen un mock de este tipo?

const getDiscount = () => new Promise((resolve, reject) => {
  setTimeout(() => {
    const discount = parseInt(Math.random() * 100);
    if (discount > 80) {
      return reject(new Error(`${discount}% es demasiado descuento!`));
    }
    return resolve(discount);
  }, 0);
});

return new Promise((resolve, reject) => {

//1. Realiza una peticion HTTP a la URL https://salty-escarpment-74924.herokuapp.com/
//2. Si la peticion retorna codigo 200 entonces resuelve la promesa
Copy link
Contributor

@santiaguf santiaguf Mar 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acabo de ver que la API devuelve un código de status 500 cuando no hay descuento:
api-discount

Un 500 debe devolverse cuando hay un error en el servidor, y este no es el caso, yo sugiero que cuando no haya descuento, devuelva 200 pero tenga un parámetro en el body de la respuesta:

{
  "gotDiscount": false,
  "msg": "Esta vez no tienes descuento. Inténtalo en tu próxima visita"
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tienes razon @santiaguf. En los dos casos deberia responder 200 y variar la llave gotDiscount. Lo que queria hacer era que la estudiante lideara con multiples codigos http. ¿Es muy enredado dejar que el servicio responda 200 con gotDiscount en true y false pero que de forma aleatoria tambien falle con 500?

Copy link
Contributor

@santiaguf santiaguf Mar 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creo que para eso podrías usar una respuesta 404 (descuento no encontrado).
Tal cómo mencionan en esta guía, es mejor evitar los códigos 500.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lupomontero lupomontero added the enhancement New feature or request label Jun 8, 2022
@lupomontero
Copy link
Member

cc/ @mfdebian

Comment on lines 509 to 530
* Cuando un pedido finalice se debe hacer una petición HTTP a la url
[https://salty-escarpment-74924.herokuapp.com/](https://salty-escarpment-74924.herokuapp.com/)
que responderá de forma aleatoria si el cliente tiene el 50% de descuento
en su cuenta. Para esto deberás llamar la función _getDiscount_ mostrada
a continuación. Termina la implementación de la función según los comentarios
que hay en ella. Te sugerimos revisar la documentacion de
[HTTP Codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status),
[fetch](https://developer.mozilla.org/en-US/docs/Web/API/fetch)
y
[creación de promesas](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise).

```js
export const getDiscount = () => {
return new Promise((resolve, reject) => {

//1. Realiza una petición HTTP a la URL https://salty-escarpment-74924.herokuapp.com/
//2. Si la petición retorna código 200 entonces resuelve la promesa
//3. Si la petición retorna código 404 entonces rechaza la promesa

});
}
```
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hola @ssinuco @adolivaresl @unjust y @lupomontero !

Perdón por haber dejado pasar este PR por tanto tiempo 🙏

Estoy de acuerdo con la observación que hace Ivy, con respecto a no depender de un servicio 3erizado en Heroku o algo así, y me gusta mucho la implementación de Lupo, que devuelve un Error en caso de que el descuento sea muy grande! Creo que por ahí debería venir esa solución.

Comment on lines 500 to 508
* Agrega la opción de actualizar 2 o más pedidos que esten en la
cocina. Muestra al usuario un **único** mensaje de confirmación
cuando **todos** los pedidos hayan sido actualizados con éxito.
Recuerda, firestore al
[actualizar un documento](https://firebase.google.com/docs/firestore/manage-data/add-data#update-data)
retorna una promesa. ¿Cómo podrías mostrar el mensaje de confirmación
unicamente cuando todas las promesas se hayan resuelto? Te sugerimos
revisar la función
[Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Con respecto a esta sección tengo mis dudas... ¿Es realmente el modus operandi de un restaurant el esperar a que todo el pedido de la mesa esté listo para entregarlo a una mesa?

Entiendo el punto de que ayudaría a reforzar el OA asociado a promesas, y que suena como una buena excusa para introducir Promise.all() pero no sé qué tan adecuado sea el ejemplo.

¿Le estoy dando mucho color? Quizás le estoy dando demasiada vuelta a algo que no lo merece, ¿Qué opinan?

En todo caso, creo que algo de eso sí ocurre, pero en mi experiencia, creo que las cosas suelen ser entregadas en dos tandas:

  1. Los bebestibles
  2. La comida

¿Quizás podemos reforzar este punto hablando un poco de eso? Es decir, esperar a que todos los bebestibles del pedido de una mesa estén listos para entregarlos, y luego lo mismo, pero con la comida? ¿O lo estoy complicando demasiado? 😁

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mfdebian de acuerdo con tu ejemplo de mundo actual, bebidas o piqueos primero, plato principal despues, pero creo por el proyecto y como los pedidos y modelo estan diseñado, seria mejor que un pedido entero es listo - es como siempre Burger Queen ha sido implementado.
Y Promise.all() podemos usar por mesas (pedidos) multiples. Al menos empezamos aqui, y si las estudiantes quieren llevar la tema mas alla, pueden.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

listo! actualizaré el PR entonces 😊

revisar la función
[Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).
* Cuando un pedido finalice se debe hacer una petición HTTP a la url
[https://salty-escarpment-74924.herokuapp.com/](https://salty-escarpment-74924.herokuapp.com/)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hay que editar eso entonces y incluir el funcion que responde un status https://github.com/Laboratoria/bootcamp/pull/1158#discussion_r892966656 en otro archivo

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@unjust @mfdebian @ssinuco Sergio, te recomiendo que ese webservice del descuento lo despliegues en otro servicio gratuito como Glitch, dado que Heroku terminará su servicio gratuito en 3 semanas

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gracias @santiaguf !! al final optaremos por dejar una función que entregue un número aleatorio de manera asíncrona en forma de promesa, para que ninguna coach tenga que estar manteniendo algún servicio con respecto a eso, muchas gracias nuevamente!

@mfdebian mfdebian added this to the v6.0.0 milestone Nov 11, 2022
@unjust unjust modified the milestones: v6.0.0, v5.5.0, v5.6.0 Nov 22, 2022
enhancement(project): Agrega nueva seccion de reforzamiento de promes…
Copy link
Contributor

@santiaguf santiaguf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@mfdebian mfdebian merged commit 412705f into Laboratoria:main Dec 14, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants